/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controlador.Service.Compras;

import Controlador.Bean.Compras.Proveedor;
import Controlador.Bean.Compras.Solicitud;
import Controlador.Bean.Log.Log;
import Controlador.Bean.RRHH.Personal;
import Data.config.SessionFac;
import gui.General.Main;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import org.apache.ibatis.session.SqlSession;

/**
 *
 * @author LiziTa
 */
public class ServicioSolicitudCompra {
   
     java.text.SimpleDateFormat sdf=new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        Date fecha= new Date();
        String f=sdf.format(fecha);
        
    public List<Solicitud> seleccionarTodo(){
        try(SqlSession sqlsession = SessionFac.SessionFactory().openSession()){
        List<Solicitud> data = (List)sqlsession.selectList("Data.Compras.ServicioSolicitudCompra.seleccionarTodo");
        sqlsession.close();
          Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"CMPSOLCP","Seleccionar Orden de Compra",f );
        
        return data;  }
    }
    
     public List<Solicitud> obtenerSolicitudesEnvAlm(){
        try(SqlSession sqlsession = SessionFac.SessionFactory().openSession()){
        List<Solicitud> data = (List)sqlsession.selectList("Data.Compras.ServicioSolicitudCompra.obtenerSolicitudesEnvAlm");
        sqlsession.close();
          Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"CMPSOLCP","Seleccionar Orden de Compra Enviadas a Almacen",f );
        return data;  }
    }
    
    

     public List<Solicitud> obtenerSolxFiltro(String id,String fi,String ff){
        try(SqlSession sqlsession = SessionFac.SessionFactory().openSession()){
             HashMap<String, String> hm = new HashMap<>();
             if (id==null) id="";
        hm.put("id", "%"+id+"%");
          hm.put("fi", fi);
            hm.put("ff", ff);
        List<Solicitud> data = (List)sqlsession.selectList("Data.Compras.ServicioSolicitudCompra.obtenerSolxFiltro",hm);
        sqlsession.close();
        return data;  }
    }
    
        public List<Solicitud> obtenerSolxFiltroAlm(String id,String fi,String ff){
        try(SqlSession sqlsession = SessionFac.SessionFactory().openSession()){
             HashMap<String, String> hm = new HashMap<>();
             if (id==null) id="";
        hm.put("id", "%"+id+"%");
          hm.put("fi", fi);
            hm.put("ff", ff);
        List<Solicitud> data = (List)sqlsession.selectList("Data.Compras.ServicioSolicitudCompra.obtenerSolxFiltroAlm",hm);
        sqlsession.close();
        return data;  }
    }
     
     
    public List<Solicitud> obtenerOrdenMov(){
        try(SqlSession sqlsession = SessionFac.SessionFactory().openSession()){
        List<Solicitud> data = (List)sqlsession.selectList("Data.Compras.ServicioSolicitudCompra.obtenerOrdenMov");
        sqlsession.close();
        return data;   }
    }
    
        public List<Solicitud> obtenerOrdenMov2(){
        try(SqlSession sqlsession = SessionFac.SessionFactory().openSession()){
        List<Solicitud> data = (List)sqlsession.selectList("Data.Compras.ServicioSolicitudCompra.obtenerOrdenMov2");
        sqlsession.close();
        return data;   }
    }
        
        
    public List<Solicitud> obtenerOrden(){
        try(SqlSession sqlsession = SessionFac.SessionFactory().openSession()){
        List<Solicitud> data = (List)sqlsession.selectList("Data.Compras.ServicioSolicitudCompra.obtenerOrden");
        sqlsession.close();
        return data;   }
    }
     public List<Solicitud> obtenerOrdenSinFactura(){
        try(SqlSession sqlsession = SessionFac.SessionFactory().openSession()){
        List<Solicitud> data = (List)sqlsession.selectList("Data.Compras.ServicioSolicitudCompra.obtenerOrdenSinFactura");
        sqlsession.close();
          Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"CMPSOLCP","Seleccionar Orden de Compra sin Factura",f );
        return data;   }
    }
              
    
         
            
     public  List<Solicitud> seleccionarOrdenxFiltro(String id){
       try(SqlSession sqlsession = SessionFac.SessionFactory().openSession()){
        HashMap<String, String> hm = new HashMap<>();
        hm.put("id", "%"+id+"%");
        List<Solicitud> data = (List)sqlsession.selectList("Data.Compras.ServicioSolicitudCompra.seleccionarOrdenxFiltro", hm);
        sqlsession.close();
        return data;}
    }
            
            
    public List<Personal> seleccionarPersonal(){
        try(SqlSession sqlsession = SessionFac.SessionFactory().openSession()){
        List<Personal> data = (List)sqlsession.selectList("Data.Compras.ServicioSolicitudCompra.seleccionarEmp");
        sqlsession.close();
        return data; }
    }
    
    public List<Solicitud> filtrarSolicitudes(String id, String nombre){
       try(SqlSession sqlsession = SessionFac.SessionFactory().openSession()){
        HashMap<String, String> hm = new HashMap<>();
        hm.put("id", "%"+id+"%");
        hm.put("nombre", "%"+nombre+"%");
        List<Solicitud> data = (List)sqlsession.selectList("Data.Compras.ServicioSolicitudCompra.filtrarSolicitudes", hm);
        sqlsession.close();
        return data; }
    }
    
    
      public void guardar(Solicitud solicitud){
        try(SqlSession sqlsession = SessionFac.SessionFactory().openSession()){
        solicitud.setIdOrdenCompra(obtenerIdSiguienteOC());
        sqlsession.insert("Data.Compras.ServicioSolicitudCompra.guardar", solicitud);
       sqlsession.commit();
        sqlsession.close();
         Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"CMPSOLCP","Guardar Orden de Compra",f );
              }
        catch(Exception ex){
            ex.printStackTrace();
        }
      
    }
      
      public String obtenerIdSiguienteOC(){
        
                
             try(SqlSession sqlsession = SessionFac.SessionFactory().openSession()){     
         String id= (String)sqlsession.selectOne("Data.Compras.ServicioSolicitudCompra.getNextCodigo");
        
        if(id!=null){
        int cod= Integer.parseInt(id.substring(3)) + 1;
        
        String defecto= "000000";
        String temp= defecto.substring(0, defecto.length()-String.valueOf(cod).length()).concat(String.valueOf(cod));

        id = (id.substring(0,3).concat(temp));}
        
        else{
        id = "OCC000001"; 
        
        }
           
        return id;
          
           }
        
      
    }
      
        
       public Long obtenerNumSol(){
        
          try(SqlSession sqlsession = SessionFac.SessionFactory().openSession()){
        HashMap<String,Long> hm = (HashMap<String,Long>)sqlsession.selectOne("Data.Compras.ServicioSolicitudCompra.seleccionarMaxId");
        sqlsession.close();
        Long maxId = hm!=null?hm.get("idordencompra"):Long.parseLong("0");
          maxId++;
          sqlsession.close();
        return (maxId);}
    }
    
    public HashMap<String,Long> seleccionarMaxId(SqlSession sqlsession,String Nombre){
        HashMap<String,Long> data = (HashMap<String,Long>)sqlsession.selectOne("Data.Compras.ServicioSolicitudCompra.seleccionarMaxId",Nombre.toUpperCase()+"-%");
          sqlsession.close();
        return data;
    }
    
    
    public void actualizar(Solicitud solicitud){
        try(SqlSession sqlsession = SessionFac.SessionFactory().openSession()){
        sqlsession.update("Data.Compras.ServicioSolicitudCompra.actualizar", solicitud);
        sqlsession.commit();
        sqlsession.close();
          Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"CMPSOLCP","Actualizar Orden de Compra",f );
        }
        catch(Exception ex){
            ex.printStackTrace();
        }
    }
    
    
     public void eliminarOrden(String Id){
         try(SqlSession sqlsession = SessionFac.SessionFactory().openSession()){
        sqlsession.update("Data.Compras.ServicioSolicitudCompra.eliminar", Id);
         sqlsession.commit();
        sqlsession.close();
          Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"CMPSOLCP","Eliminar Orden de Compra",f );
        }
        catch(Exception ex){
            ex.printStackTrace();
        }
    }
      
    
    
    
     public void actualizarEstado(String id){
         try(SqlSession sqlsession = SessionFac.SessionFactory().openSession()){
        sqlsession.update("Data.Compras.ServicioSolicitudCompra.actualizarE",id);
        sqlsession.commit();
        sqlsession.close();
        }
        catch(Exception ex){
            ex.printStackTrace();
        }
    } 
    
    
    public void actualizarM(Solicitud solicitud){
       try(SqlSession sqlsession = SessionFac.SessionFactory().openSession()){
        sqlsession.update("Data.Compras.ServicioSolicitudCompra.actualizarM", solicitud);
        sqlsession.commit();
        sqlsession.close();
        }
        catch(Exception ex){
            ex.printStackTrace();
        }
    }  
    
            
        public String obtenerIdMov(String tipo ){
        try(SqlSession sqlsession = SessionFac.SessionFactory().openSession()){
        String maxId;
        Long id = sqlsession.selectOne("Data.Almacen.ServicioSolicitudMovimiento.seleccionarMaxId");
        id++;
        maxId = tipo.substring(0,3).toUpperCase()+"-"+id.toString();
        sqlsession.close();
          Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"CMPSOLCP","Obtener IdMovimiento",f );
        return maxId; }
    }
    
    
}
